/**
 * 图表工具函数
 */

/**
 * 格式化货币金额
 * @param {number} value - 待格式化的金额
 * @param {boolean} showDecimals - 是否显示小数部分
 * @returns {string} - 格式化后的金额字符串
 */
export const formatCurrency = (value, showDecimals = true) => {
  return new Intl.NumberFormat('zh-CN', { 
    style: 'currency', 
    currency: 'CNY',
    minimumFractionDigits: showDecimals ? 2 : 0,
    maximumFractionDigits: showDecimals ? 2 : 0
  }).format(value);
};

/**
 * 格式化百分比
 * @param {number} value - 待格式化的比例值（0-1之间）
 * @param {number} decimals - 小数位数
 * @returns {string} - 格式化后的百分比字符串
 */
export const formatPercentage = (value, decimals = 0) => {
  return `${(value * 100).toFixed(decimals)}%`;
};

/**
 * 格式化年份
 * @param {number} value - 年数
 * @param {number} decimals - 小数位数
 * @returns {string} - 格式化后的年份字符串
 */
export const formatYears = (value, decimals = 2) => {
  return `${value.toFixed(decimals)}年`;
};

/**
 * 创建通用Tooltip内容处理函数
 * @param {Object} options - 配置选项
 * @param {Function} options.formatLabel - 标签格式化函数
 * @param {Object} options.formatters - 各数据类型的格式化函数映射
 * @param {Object} options.nameMap - 数据键到显示名称的映射
 * @param {Function} options.getExtraContent - 可选的额外内容生成函数
 * @returns {Function} - Tooltip内容渲染函数
 */
export const createTooltipFormatter = ({ 
  formatLabel, 
  formatters, 
  nameMap, 
  getExtraContent
}) => {
  return ({ active, payload, label }) => {
    if (!active || !payload || !payload.length) return null;
    
    return (
      <div className="custom-tooltip">
        <p className="tooltip-label">{formatLabel(label)}</p>
        <div className="tooltip-content">
          {payload.map((entry, index) => {
            // 对于非显示线但在数据中的项目，跳过显示
            if (!entry.stroke) return null;
            
            const { dataKey, value, color } = entry;
            
            // 获取适当的格式化器
            const formatter = formatters[dataKey] || (v => v);
            
            // 获取显示名称
            const name = nameMap[dataKey] || entry.name;
            
            return (
              <p key={`item-${index}`} style={{ color }}>
                {name}: {formatter(value)}
              </p>
            );
          })}
          
          {getExtraContent && getExtraContent(payload, label)}
        </div>
      </div>
    );
  };
}; 